﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ControlsLib;
using System.Linq.Expressions;
using GestionePolveri2.DAL;
using LinqKit;
using System.Data.Objects;
using GestionePolveriLib.Facades;
using FrameworkLib.Filters;
using GestionePolveriLib.BL.FilterBags;

namespace GestionePolveriLib.BL.Filters
{
    public class AnagraficaFattureFilterBag : FilterBase<Fatture>, IFilterBase
    {
        public string NumFatt { get; set; }

        public AnagraficaFattureFilterBag()
        {
            InitializeFilter();
        }

        public void InitializeFilter()
        {
            NumFatt = null;
        }

        public override Expression<Func<Fatture, bool>> SetUpFilter()
        {
            var predicate = PredicateBuilder.True<Fatture>();

            if (this.UseDates)
            {
                // aggiungi al filtro il controllo sulla data...
                predicate = predicate.And(im => (EntityFunctions.TruncateTime(im.DataFattura) >= EntityFunctions.TruncateTime(this.PeriodFrom)) &&
                                                 EntityFunctions.TruncateTime(im.DataFattura) <= EntityFunctions.TruncateTime(this.PeriodTo));
            }

            if (!string.IsNullOrWhiteSpace(NumFatt))
            {
                predicate = predicate.And(im => im.NumFattura == NumFatt);
            }

            return predicate;
        }

        public override string ToTraceString()
        {
            string retValue = base.ToTraceString();

            StringBuilder sb = new StringBuilder(base.ToTraceString());

            sb.Append(FilterBagHelper.GetCodicePolvereTraceString(this.NumFatt));

            return sb.ToString();
        }
    }
}
